import { DD_SYSTEM } from '@/constants/api-pre';
import { request } from '@/service/request';

/** 部门对象实体 */
export type Dept = Api.Common.CommonRecord<{
  /** 父部门ID */
  parentId: number;
  /** 父节点路径 */
  treePath: string;
  /** 部门名称 */
  name: string;
  /** 排序 */
  sort: number;
  /** 负责人 */
  leader: string | null;
  /** 负责人 */
  leaderUserId: string | null;
  /** 电话 */
  phone: string;
  /** 邮箱 */
  email: string;
}>;

export type DeptList = Api.Common.PaginatingQueryRecord<Dept>;

/** 部门查询参数 */
export type DeptSearchParams = CommonType.RecordNullable<Pick<Dept, 'name' | 'status'> & Api.Common.CommonSearchParams>;

export type DeptEditAndCreateParams = CommonType.RecordNullable<
  Pick<Dept, 'name' | 'sort' | 'status' | 'parentId' | 'leaderUserId' | 'phone' | 'email'>
>;

/** 获取部门表单 URL */
export function getFetchDeptUrl(id: number) {
  return `${DD_SYSTEM}/dept/${id}/form`;
}

/** 获取部门树 */
export function fetchGetDeptList(params?: DeptSearchParams) {
  return request<DeptList>({
    url: `${DD_SYSTEM}/dept/list`,
    method: 'get',
    params
  });
}

/**
 * 获取部门树下拉选项
 *
 * @returns
 */
export function fetchAllDeptOptions() {
  return request<Api.Common.TreeOptions[]>({
    url: `${DD_SYSTEM}/dept/options`,
    method: 'get'
  });
}

/**
 * 新增部门
 *
 * @param data
 */
export function createDept(data: DeptEditAndCreateParams) {
  return request<boolean>({
    url: `${DD_SYSTEM}/dept`,
    method: 'post',
    data
  });
}

/**
 * 编辑部门
 *
 * @param id
 * @param data
 */
export function updateDept(id: number, data?: DeptEditAndCreateParams) {
  return request<boolean>({
    url: `${DD_SYSTEM}/dept/${id}`,
    method: 'put',
    data
  });
}

/**
 * 删除部门
 *
 * @param ids
 */
export function deleteDepts(ids: string) {
  return request<boolean>({
    url: `${DD_SYSTEM}/dept/${ids}`,
    method: 'delete'
  });
}
